#pragma GCC optimize(2, "Ofast", "inline")
#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <list>
#include <unordered_map>
#include <algorithm>
#define endl '\n'
#define int long long
#define pii pair<int, int>
using namespace std;
const int MOD = 998244353;
const int MXN = 2e5 + 5;

int n;
string s;
int cnt1[MXN];
int cnt0[MXN];
int even = 1; // cnt0[0] = 0 是偶数
int odd = 0;  // 初始没有奇数
long long ans = 0;
signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    cin >> n >> s;
    s = '0' + s;
    // 计算前缀和：cnt0[i]表示前i个字符中'0'的个数
    for (int i = 1; i <= n; ++i)
    {
        cnt0[i] = cnt0[i - 1] + (s[i] == '0');
    }
    for (int i = 1; i <= n; ++i)
    {
        if (cnt0[i] % 2 == 0)
        {
            // 当前前缀和是偶数，与之前所有偶数前缀组合
            ans += even;
            even++;
        }
        else
        {
            // 当前前缀和是奇数，与之前所有奇数前缀组合
            ans += odd;
            odd++;
        }
    }
    cout << ans << '\n';
    return 0;
}